iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
5
Security

突破困境:資安開源工具應用系列 第 21

開源網路裝置服務監控系統:LibreNMS (一)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20191003/20118848xkrBSb9zGy.png

對於 IT 管理者來說,每天要面對的就是海量網路裝置,這些裝置的使用情況與好壞,流量就是最重要的指標,在這麼多的來源數據,我們需要有良好的工具軟體以加速我們掌握最新的情況。

除此之外,各個伺服器所提供多樣的服務,亦需要有自動化的狀態監控系統,才能在發生障礙時即時通知管理者,及早發現及早治療,從而降低系統停止服務的時間。


方案介紹

LibreNMS 是一套開源的網路與服務監控系統,主要以 PHP、MariaDB、SNMP 技術為主進行裝置資料搜集,它所能夠提供的功能如下:

  • 全 Web 化操作介面
  • 監測網路裝置連線狀態
  • 提供裝置效能數據記錄
  • 記錄網路裝置流量
  • 檢查服務運作狀態
  • 多樣化的警報發送機制
  • 支援 Nagios Plugin (Service)
  • 支援多種身份驗證
  • 逐漸完善的繁體中文介面 (嘿嘿)

在裝置監測的功能上,LibreNMS 提供了五種機制,分別可以做到不同等級的深入探索。

https://ithelp.ithome.com.tw/upload/images/20191003/20118848UtMXf9q1A7.jpg
裝置監測方式

最基本從 ICMP 做裝置是否連線中的檢測,接著以 SNMP 最較為深度的資料採集,進一步可以安裝 Agent 取得更詳細的作業系統發行版本資訊與處理程序等。

針對特定的應用,有提供 Application 功能來對應的效能數據擷取方式,而在不同服務的狀況監控則使用名為 Service 的機制去監視各個服務的運作狀態,而且可以相容 Nagios 的 Plugin 做更多的擴充。


安裝方式

官網文件庫有非常詳細的使用說明,也提供了預先建置好的虛擬機器檔案可以直接下載開機使用,不過本次仍然以 Ubuntu 18.04 做為範例,提供安裝程序:

安裝所須套件

apt install software-properties-common
add-apt-repository universe
apt update
apt install curl composer fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap php7.2-cli php7.2-curl php7.2-fpm php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-snmp php7.2-xml php7.2-zip python-memcache python-mysqldb rrdtool snmp snmpd whois

安裝與設定 LibreNMS

useradd librenms -d /opt/librenms -M -r
usermod -a -G librenms www-data
cd /opt
git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms
chmod 770 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

安裝 PHP 相關套件

su - librenms
./scripts/composer_wrapper.php install --no-dev
exit

資料庫與帳號建立

systemctl restart mysql
mysql -uroot -p
CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
exit

修改設定檔 (/etc/mysql/mariadb.conf.d/50-server.cnf)

# 找到 [mysqld] 區段加入下列
innodb_file_per_table=1
lower_case_table_names=0

# 改完退出編輯器重啟服務
systemctl restart mysql

設定網頁伺服器 (/etc/php/7.2/fpm/php.ini,請依據的版本找到對應路徑,本文以 7.2 為例)

# 設定正確時區
date.timezone = Asia/Taipei

# 改完退出編輯器重啟服務
systemctl restart php7.2-fpm

設定 Nginx 站台 (/etc/nginx/conf.d/librenms.conf)

# 以下設定貼上後存檔
server {
 listen      80;
 server_name librenms.example.com;
 root        /opt/librenms/html;
 index       index.php;

 charset utf-8;
 gzip on;
 gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
 location / {
  try_files $uri $uri/ /index.php?$query_string;
 }
 location /api/v0 {
  try_files $uri $uri/ /api_v0.php?$query_string;
 }
 location ~ \.php {
  include fastcgi.conf;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
 }
 location ~ /\.ht {
  deny all;
 }
}

# 改完退出編輯器重啟服務
rm /etc/nginx/sites-enabled/default
systemctl restart nginx

設定 SNMP 服務

cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro
systemctl restart snmpd

設定排程作業

cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

檔案權限調整

chown -R librenms:librenms /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

安裝來到這裡以後,已經可以進入 LibreNMS 網站開始進行初始安裝設定,請以瀏覽器開啟 http://ip/install.php ,並依據畫面指示一步一步往下操作,即可完成。


主要功能

在 LibreNMS 最常用的模式,是將裝置以 SNMP 協定加入監控,安裝的方式相當容易,點選功能表的 [Devices] -> [Add Device],即可來到新增裝置的畫面。

https://ithelp.ithome.com.tw/upload/images/20191003/201188484g8mPJUcU6.png
加入裝置

最基本的欄位,於 Hostname 中填入 IP 或 FQDN,在 Community 填入 Community String,即可加入,過一會後 LibreNMS 就會自動去爬這個裝置裡有那些資料,慢慢的將資訊給補齊。

所有被加入的裝置都會在裝置清單裡,從功能表的 [Devices] -> [All Devices] 點選後,即可閱覽所有在掌握中的裝置對象。

https://ithelp.ithome.com.tw/upload/images/20191003/20118848eabpL3iJ7m.png
裝置清單

點選裝置可以進入查看更詳細的資訊內容,下圖是我一台 Synology 的裝置細節,提供許多有用的效能參考資訊,例如 CPU 與網路流量的圖表可以讓我們一眼就看出整個趨勢是否在正常運作範圍,若 CPU 一直持續飆高,就該儘快了解是效能不足,還是中了惡意挖礦程式之類。

https://ithelp.ithome.com.tw/upload/images/20191003/20118848IYFfyIyP8W.png
裝置細節

再往下捲,依據不同裝置的支援程度,可以看到更多的資訊,例如溫度與風扇運作狀況等等。

https://ithelp.ithome.com.tw/upload/images/20191003/20118848KItaWxDZbt.png
更多裝置細節1

若是支援的印表機裝置,甚至可以把各色碳粉量以各種顏色表示存量,以及耗材的使用壽命已達多少百分比的資訊。

https://ithelp.ithome.com.tw/upload/images/20191003/20118848U3qHqY4EH4.png
更多裝置細節2


小結

在今天的篇幅中,我們成功的以 LibreNMS 建置中央收集各個裝置資訊的監控系統,利用 SNMP 協定將各個裝置的 CPU、MEMORY、NETWORK 等資訊一一收回,並將歷史數據存放以備圖表繪製與查詢使用,可以讓我們做前後比對與發生狀況時的確認。

尤其是圖表功能,一旦把時間軸拉長來看,很多主機的異常其實就能夠在一眼看去就發現,而許多資訊安全的狀況經常就藏在這些可疑的圖表之中。

除了這些功能之外,LibreNMS 還有許多功能可以做為我們資安強化的輔助機制,將在後面的篇幅中持續介紹。


參考資料


上一篇
開源記錄收集轉送工具:NXLog CE
下一篇
開源網路裝置服務監控系統:LibreNMS (二)
系列文
突破困境:資安開源工具應用33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
to790303
iT邦新手 5 級 ‧ 2019-10-07 18:21:34

您好,請問請一下,我安裝成功了,但是我每次在點擊右上角的librenms的圖標時,他導向的頁面就會發生錯誤,查看網址為: [http://librenms.example.com/]
請問這是什麼原因呢?

to790303 iT邦新手 5 級 ‧ 2019-10-07 19:39:53 檢舉

我已經自行解決了,原因是nginx配置檔裡面,設定錯了,謝謝

恭喜解決啦。

0
Ken(Bigcandy)
iT邦大師 1 級 ‧ 2019-10-08 09:01:36

優秀好文,非推不可!!

0
as900
iT邦研究生 4 級 ‧ 2019-10-16 16:32:06

请问,我配置好后,添加设备,提示:
Could not ping XXX.XXX.XXX.XXX(Switch IP Address)

但我已经在交换机中开启了 SNMP
https://ithelp.ithome.com.tw/upload/images/20191016/20099494CI5x8067ed.png

还有,Add Device 时的 Community 设置,指的是 SNMP 中的 Community Name 吗?

1.裝置要開放 ping
2.是的

as900 iT邦研究生 4 級 ‧ 2019-10-17 08:12:50 檢舉

我可以通过 Ubuntu ping 这台交换机

那應該 ping 這端沒問題,剩下看 snmp 過去是不是有防火牆,或是 protocol/port 不同

0
leirex1201
iT邦新手 5 級 ‧ 2019-11-07 10:57:00

請教一下節省哥大大
透過snmp方式爬到ifName、ifDescr、ifAlias的中文(台灣繁體)都會變成"....."
請教大大snmps編碼要怎麼解決呢,感謝大大

看更多先前的回應...收起先前的回應...

這是已知問題,要待開發團隊修正

感謝大大回覆

Jason Cheng (節省哥)再請教一下大大,透過SNMP方式,需要匯入監控的該設備MIB檔案到LibreNMS嗎
如果需要,那要怎麼匯呢,感謝

不用匯入,它已經內建很多廠牌與型號了

Jason Cheng (節省哥)
謝謝大大回覆
再次請教節省哥大大,關於SNMP爬到的中文字會變成...這個問題,
已有標記被處理了嗎,感謝

loke0204 iT邦新手 2 級 ‧ 2019-12-22 12:08:32 檢舉

= =你snmp的mib要設定

0
fireflybug
iT邦研究生 4 級 ‧ 2019-11-20 10:35:00

我還停留在 CACTI..........

0
keven0129
iT邦新手 5 級 ‧ 2020-09-04 16:04:52

請問如果LibreNMS裝在VM虛擬機裡面,當觸發警報時,可以去觸發虛擬機的蜂鳴器嗎 ?
或是可以去觸發另一台個人電腦的蜂鳴器嗎 ?

0
keven0129
iT邦新手 5 級 ‧ 2020-09-04 16:24:08

請問LibreNMS 上面的畫圖功能,顯示 "error drawing graph" 是什麼沒裝好嗎 ?

0
gongc9433
iT邦新手 2 級 ‧ 2021-05-16 13:06:26

你好,安裝完成後,監控圖形無法出現,請問還需要安裝甚麼套件嗎? 我用的是 ubutu 20.04版本

0
idea-stu
iT邦新手 5 級 ‧ 2023-08-23 09:55:16

rm /etc/nginx/sites-enabled/default
執行後查看並沒有此檔案無法刪除

systemctl restart nginx
執行後錯誤無法重啟

環境是
Ubuntu 22.04.3 LTS
PHP 8.1.2-1ubuntu2.13 (cli)
nginx version: nginx/1.18.0 (Ubuntu)

0
lanelvis
iT邦新手 5 級 ‧ 2024-03-29 11:16:06

節省大大:
請問librenms可以收機房的溫度資訊嗎?我在機房有一個溫溼度的設備,之前用cacti都可以收到資料,現在換成librenms後就收不到資料了,這是什麼原因呢?

我要留言

立即登入留言